package de.slackspace.alfa; import java.io.FileReader; import java.io.IOException; import java.util.List; import java.util.Properties; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import de.slackspace.alfa.azure.LogFetcher; import de.slackspace.alfa.elasticsearch.ElasticSearchServer; import de.slackspace.alfa.elasticsearch.LogCleaner; import de.slackspace.alfa.exception.ConnectionException; import de.slackspace.alfa.properties.PropertyHandler; import de.slackspace.alfa.properties.PropertyHandlerFactory; public class Alfa { private static final String ALFA_CONFIG = "conf/alfa.properties"; private static final String ELASTICSEARCH_CONFIG = "conf/elasticsearch-server.properties"; private ElasticSearchServer elasticSearchServer; public void start(boolean runAsService) throws IOException, ConnectionException { startElasticSearchServer(runAsService); String configFile = getAlfaConfig(runAsService); List<LogFetcher> logFetchers = initializeLogFetcher(configFile); LogCleaner logCleaner = initializeLogCleaner(configFile); fetchAndStoreLogs(logFetchers, logCleaner); } public void stop() { if(elasticSearchServer != null) { elasticSearchServer.stop(); } } private List<LogFetcher> initializeLogFetcher(String configFile) throws ConnectionException { return ObjectFactory.constructLogFetcher(configFile, elasticSearchServer.getClient()); } private LogCleaner initializeLogCleaner(String configFile) { PropertyHandler propertyHandler = PropertyHandlerFactory.createPropertyHandler(configFile); return ObjectFactory.constructLogCleaner(propertyHandler, elasticSearchServer.getClient()); } private String getAlfaConfig(boolean runAsService) { String configFile = ALFA_CONFIG; if(runAsService) { configFile = "../../" + configFile; } return configFile; } private void startElasticSearchServer(boolean runAsService) throws IOException { String configFile = ELASTICSEARCH_CONFIG; if(runAsService) { configFile = "../../" + configFile; } Properties config = new Properties(); config.load(new FileReader(configFile)); elasticSearchServer = new ElasticSearchServer(config); elasticSearchServer.start(); } public void fetchAndStoreLogs(List<LogFetcher> logFetchers, LogCleaner logCleaner) { ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(logFetchers.size()); //this will execute the logFetcher every n minutes, if a logFetcher run exceeds n minutes, //the next start will be blocked until the first one has finished for (LogFetcher logFetcher : logFetchers) { scheduledExecutorService.scheduleAtFixedRate(logFetcher, 0, logFetcher.getPollingIntervalMinutes(), TimeUnit.MINUTES); } //this will execute the logCleaner every 24 hours scheduledExecutorService.scheduleAtFixedRate(logCleaner, 0, 24, TimeUnit.HOURS); } }